﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
using namespace std;

int main()
{
    int n = 0;
    cin >> n;

    while (n--)
    {
        //贪心，要最小的恰好等于0的步数，所以要尽可能的减去两倍的数字
        //但是也不能盲目的减去两倍的数字，因为可能会导致数字小于0
        //怎么判断能否减去两倍，如果减去两倍的数字a，那么后面就可能减去2*a，或者2*(2*a)等
        //都是2a的倍数，所以要判断减去2*a以后，再减后面的数字能不能恰好等于0，就判断模2*a是不是等于0
        int x = 0;
        cin >> x;

        int res = 1;//步数
        int sub = 1;//被减的数字
        x -= 1;
        while (x)
        {
            if (x % (2 * sub) == 0)//可以减去2*sub
            {
                x -= 2 * sub;
                sub *= 2;
            }
            else
            {
                x -= sub;
            }
            ++res;
        }
        cout << res << endl;
    }
    return 0;
}

/*
链接：https://ac.nowcoder.com/acm/problem/219038
来源：牛客网

题目描述
给出一个正整数H，从1开始减，第一次必须减1，每次减的数字都必须和上一次相同或者
是上一次的两倍，请问最少需要几次能把H恰好减到0。
输入描述:
第一行给出一个正整数T，1≤T≤10^4
接下来T行每行一个H,1≤H≤10^9
输出描述:
每行一个正整数代表最少的次数
示例1
输入
3
3
5
7
输出
2
3
3
*/

